/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamankomponenanggaranbiayagaji;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.common.ClassConnection;
import org.springframework.jdbc.core.RowMapper;
import org.zkoss.zul.Messagebox;

/**
 *
 * @author hendro
 *  * revisied by : sarah (BAPSI), tgl 17-12-2009
 */
public class PerekamanKomponenAnggaranBiayaGajiDAOImpl implements PerekamanKomponenAnggaranBiayaGajiDAO {

    public PerekamanKomponenAnggaranBiayaGajiDAOImpl() {
        ClassConnection.getTransactionProxyFactoryBean().setTarget(this);
    }

    public void insert(PerekamanKomponenAnggaranBiayaGaji obj) throws Exception {
        String sql = "INSERT INTO ppmk.komponenAnggaranBiayaGaji(tahunAnggaran,isKomponenGaji,kodeKomponenGaji,komponenDiluarGaji,adm,alias,rumus) " +
                "VALUES(?,?,?,?,?,?,?)";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    obj.getTahunAnggaran(),
                    obj.getIsKomponenGaji(),
                    obj.getKodeKomponenGaji(),
                    obj.getKomponenDiluarGaji(),
                    obj.getAdm(),
                    obj.getAlias(),
                    obj.getRumus()
                });
    }

    public void update(PerekamanKomponenAnggaranBiayaGaji obj) throws Exception {
        String sql = "UPDATE ppmk.komponenAnggaranBiayaGaji SET tahunAnggaran=?," +
                "isKomponenGaji=?," +
                "kodeKomponenGaji=?," +
                "komponenDiluarGaji=?," +
                "adm=?," +
                "alias=?," +
                "rumus=? WHERE idKomponen=?";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    obj.getTahunAnggaran(),
                    obj.getIsKomponenGaji(),
                    obj.getKodeKomponenGaji(),
                    obj.getKomponenDiluarGaji(),
                    obj.getAdm(),
                    obj.getAlias(),
                    obj.getRumus(),
                    obj.getIdKomponen()
                });
    }

    public void delete(PerekamanKomponenAnggaranBiayaGaji obj) throws Exception {
        String sql = "DELETE FROM ppmk.komponenAnggaranBiayaGaji WHERE idKomponen=?";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    obj.getIdKomponen()
                });
    }

    public List<PerekamanKomponenAnggaranBiayaGaji> list(String tahun) throws Exception {
        List<PerekamanKomponenAnggaranBiayaGaji> list = new ArrayList<PerekamanKomponenAnggaranBiayaGaji>();
        List<Map> rows = ClassConnection.getJdbc().queryForList("SELECT * FROM ppmk.komponenAnggaranBiayaGaji where tahunAnggaran = '" + tahun + "' ORDER BY adm");
        for (Map m : rows) {
            PerekamanKomponenAnggaranBiayaGaji obj = new PerekamanKomponenAnggaranBiayaGaji();
            obj.setIdKomponen(ClassAntiNull.AntiNullInt(m.get("idKomponen")));
            obj.setTahunAnggaran(ClassAntiNull.AntiNullString(m.get("tahunAnggaran")));
            obj.setIsKomponenGaji(ClassAntiNull.AntiNullString(m.get("isKomponenGaji")));
            obj.setKodeKomponenGaji(ClassAntiNull.AntiNullString(m.get("kodeKomponenGaji")));
            obj.setKomponenDiluarGaji(ClassAntiNull.AntiNullString(m.get("komponenDiluarGaji")));
            obj.setAdm(ClassAntiNull.AntiNullString(m.get("adm")));
            obj.setAlias(ClassAntiNull.AntiNullString(m.get("alias")));
            obj.setRumus(ClassAntiNull.AntiNullString(m.get("rumus")));
            list.add(obj);
        }
        return list;
    }

    public List<String> loadTahun() throws Exception {
        String sql = "SELECT Distinct(tahunAnggaran) FROM ppmk.komponenAnggaranBiayaGaji ORDER BY tahunAnggaran";
        List<String> list = new ArrayList<String>();
        List<Map> rows = ClassConnection.getJdbc().queryForList(sql);
        for (Map m : rows) {
            list.add(ClassAntiNull.AntiNullString(m.get("tahunAnggaran")));
        }
        return list;
    }

    public List<KomponenPegawai> loadKomponePegawai() throws Exception {
        String sql = "SELECT * FROM kamus.stat_edu";
        List<KomponenPegawai> list = new ArrayList<KomponenPegawai>();
        List<Map> rows = ClassConnection.getJdbc().queryForList(sql);
        for (Map m : rows) {
            KomponenPegawai k = new KomponenPegawai();
            k.setKd_stat_edu(ClassAntiNull.AntiNullString(m.get("Kd_stat_edu")));
            k.setNm_stat_edu(ClassAntiNull.AntiNullString(m.get("Nm_stat_edu")));
            list.add(k);
        }
        return list;
    }

    public List<KomponenGaji> loadKomponenGaji() throws Exception {
        String sql = "SELECT KdKomponen,KdGroupBayar,NmKomponen,isRutin,isPotongan,KdHeader FROM " +
                "penggajian.komponengaji";
        List<KomponenGaji> list = new ArrayList<KomponenGaji>();
        List<Map> rows = ClassConnection.getJdbc().queryForList(sql);
        for (Map m : rows) {
            KomponenGaji k = new KomponenGaji();
            k.setKdKomponen(ClassAntiNull.AntiNullString(m.get("KdKomponen")));
            k.setKdGroupBayar(ClassAntiNull.AntiNullString(m.get("KdGroupBayar")));
            k.setNmKomponen(ClassAntiNull.AntiNullString(m.get("NmKomponen")));
            k.setIsRutin(ClassAntiNull.AntiNullString(m.get("isRutin")));
            k.setIsPotongan(ClassAntiNull.AntiNullString(m.get("isPotongan")));
            k.setKdHeader(ClassAntiNull.AntiNullString(m.get("KdHeader")));
            list.add(k);
        }
        return list;
    }

    public KomponenGaji selectKomponeGaji(String kd) throws Exception {
        String sql = "SELECT KdKomponen,KdGroupBayar,NmKomponen,isRutin,isPotongan,KdHeader FROM " +
                "penggajian.komponengaji WHERE KdKomponen=?";
        return (KomponenGaji) ClassConnection.getJdbc().queryForObject(sql,
                new Object[]{kd}, new RowMapper() {

            public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
                KomponenGaji k = new KomponenGaji();
                k.setKdKomponen(ClassAntiNull.AntiNullString(rs.getString("KdKomponen")));
                k.setKdGroupBayar(ClassAntiNull.AntiNullString(rs.getString("KdGroupBayar")));
                k.setNmKomponen(ClassAntiNull.AntiNullString(rs.getString("NmKomponen")));
                k.setIsRutin(ClassAntiNull.AntiNullString(rs.getString("isRutin")));
                k.setIsPotongan(ClassAntiNull.AntiNullString(rs.getString("isPotongan")));
                k.setKdHeader(ClassAntiNull.AntiNullString(rs.getString("KdHeader")));
                return k;
            }
        });

    }

    public List<SimbolOperasi> loadSimbolOperasi() throws Exception {
        List<SimbolOperasi> list = new ArrayList<SimbolOperasi>();
        list.add(new SimbolOperasi("Tambah", "+"));
        list.add(new SimbolOperasi("Kurang", "-"));
        list.add(new SimbolOperasi("Kali", "*"));
        list.add(new SimbolOperasi("Bagi", "/"));
        return list;
    }

    public KomponenPegawai selectKomponenPegawai(String kd) throws Exception {
        String sql = "SELECT Kd_stat_edu,Nm_stat_edu FROM kamus.stat_edu WHERE Kd_stat_edu=?";
        return (KomponenPegawai) ClassConnection.getJdbc().queryForObject(sql, new Object[]{kd},
                new RowMapper() {

                    public Object mapRow(ResultSet rs, int arg1) throws SQLException {
                        KomponenPegawai k = new KomponenPegawai();
                        k.setKd_stat_edu(ClassAntiNull.AntiNullString(rs.getString("Kd_stat_edu")));
                        k.setNm_stat_edu(ClassAntiNull.AntiNullString(rs.getString("Nm_stat_edu")));
                        return k;
                    }
                });
    }

    public List<PerekamanKomponenAnggaranBiayaGaji> select(String tahunAnggaran, String kodeKomponenGaji, String komponenDiluarGaji, String alias,String adm) throws Exception {
        String sql = "SELECT * FROM ppmk.komponenAnggaranBiayaGaji WHERE ((kodeKomponenGaji=? OR komponenDiluarGaji=?) OR alias=?) and tahunAnggaran = ? and adm = ? ORDER BY idKomponen";
        List<PerekamanKomponenAnggaranBiayaGaji> list = new ArrayList<PerekamanKomponenAnggaranBiayaGaji>();
        List<Map> rows = ClassConnection.getJdbc().queryForList(sql, new Object[]{
                    kodeKomponenGaji,
                    komponenDiluarGaji,
                    alias,
                    tahunAnggaran,
                    adm
                });
        for (Map m : rows) {
            PerekamanKomponenAnggaranBiayaGaji obj = new PerekamanKomponenAnggaranBiayaGaji();
            obj.setIdKomponen(ClassAntiNull.AntiNullInt(m.get("idKomponen")));
            obj.setTahunAnggaran(ClassAntiNull.AntiNullString(m.get("tahunAnggaran")));
            obj.setIsKomponenGaji(ClassAntiNull.AntiNullString(m.get("isKomponenGaji")));
            obj.setKodeKomponenGaji(ClassAntiNull.AntiNullString(m.get("kodeKomponenGaji")));
            obj.setKomponenDiluarGaji(ClassAntiNull.AntiNullString(m.get("komponenDiluarGaji")));
            obj.setAdm(ClassAntiNull.AntiNullString(m.get("adm")));
            obj.setAlias(ClassAntiNull.AntiNullString(m.get("alias")));
            obj.setRumus(ClassAntiNull.AntiNullString(m.get("rumus")));
            list.add(obj);
        }
//        Messagebox.show("SELECT * FROM ppmk.komponenAnggaranBiayaGaji WHERE ((kodeKomponenGaji='"+kodeKomponenGaji+"' OR komponenDiluarGaji='"+komponenDiluarGaji+"') OR alias='"+alias+"') and tahunAnggaran ='"+tahunAnggaran+"' ORDER BY idKomponen");
        return list;
    }

    public List<PerekamanKomponenAnggaranBiayaGaji> selectUpdate(String tahunAnggaran, int idKomponen, String kodeKomponenGaji, String komponenDiluarGaji, String alias,String adm) throws Exception {
        String sql = "SELECT * FROM ppmk.komponenAnggaranBiayaGaji WHERE (kodeKomponenGaji=? OR komponenDiluarGaji=? OR alias=?) AND idKomponen<>? and tahunAnggaran = ? and adm = ? ORDER BY idKomponen";
        List<PerekamanKomponenAnggaranBiayaGaji> list = new ArrayList<PerekamanKomponenAnggaranBiayaGaji>();
        List<Map> rows = ClassConnection.getJdbc().queryForList(sql, new Object[]{
                    kodeKomponenGaji,
                    komponenDiluarGaji,
                    alias,
                    idKomponen,
                    tahunAnggaran,
                    adm
                });
        for (Map m : rows) {
            PerekamanKomponenAnggaranBiayaGaji obj = new PerekamanKomponenAnggaranBiayaGaji();
            obj.setIdKomponen(ClassAntiNull.AntiNullInt(m.get("idKomponen")));
            obj.setTahunAnggaran(ClassAntiNull.AntiNullString(m.get("tahunAnggaran")));
            obj.setIsKomponenGaji(ClassAntiNull.AntiNullString(m.get("isKomponenGaji")));
            obj.setKodeKomponenGaji(ClassAntiNull.AntiNullString(m.get("kodeKomponenGaji")));
            obj.setKomponenDiluarGaji(ClassAntiNull.AntiNullString(m.get("komponenDiluarGaji")));
            obj.setAdm(ClassAntiNull.AntiNullString(m.get("adm")));
            obj.setAlias(ClassAntiNull.AntiNullString(m.get("alias")));
            obj.setRumus(ClassAntiNull.AntiNullString(m.get("rumus")));
            list.add(obj);
        }
//        Messagebox.show("SELECT * FROM ppmk.komponenAnggaranBiayaGaji WHERE (kodeKomponenGaji='"+kodeKomponenGaji+"' OR komponenDiluarGaji='"+komponenDiluarGaji+"' OR alias='"+alias+"') AND idKomponen<>"+idKomponen+" and tahunAnggaran = '"+tahunAnggaran+"' ORDER BY idKomponen");
        return list; 
    }

    public List<PerekamanKomponenAnggaranBiayaGaji> list(String tahunAnggaran, String adm) throws Exception {
        List<PerekamanKomponenAnggaranBiayaGaji> list = new ArrayList<PerekamanKomponenAnggaranBiayaGaji>();
        List<Map> rows = ClassConnection.getJdbc().queryForList("SELECT * FROM ppmk.komponenAnggaranBiayaGaji " +
                "WHERE tahunAnggaran=? AND adm=? ORDER BY idKomponen", new Object[]{
                    tahunAnggaran,
                    adm
                });
        for (Map m : rows) {
            PerekamanKomponenAnggaranBiayaGaji obj = new PerekamanKomponenAnggaranBiayaGaji();
            obj.setIdKomponen(ClassAntiNull.AntiNullInt(m.get("idKomponen")));
            obj.setTahunAnggaran(ClassAntiNull.AntiNullString(m.get("tahunAnggaran")));
            obj.setIsKomponenGaji(ClassAntiNull.AntiNullString(m.get("isKomponenGaji")));
            obj.setKodeKomponenGaji(ClassAntiNull.AntiNullString(m.get("kodeKomponenGaji")));
            obj.setKomponenDiluarGaji(ClassAntiNull.AntiNullString(m.get("komponenDiluarGaji")));
            obj.setAdm(ClassAntiNull.AntiNullString(m.get("adm")));
            obj.setAlias(ClassAntiNull.AntiNullString(m.get("alias")));
            obj.setRumus(ClassAntiNull.AntiNullString(m.get("rumus")));
            list.add(obj);
        }
        return list;
    }

    public PerekamanKomponenAnggaranBiayaGaji select(int idKomponen) throws Exception {
        String sql = "SELECT * FROM ppmk.komponenAnggaranBiayaGaji WHERE idKomponen=?";
        return (PerekamanKomponenAnggaranBiayaGaji) ClassConnection.getJdbc().queryForObject(sql, new Object[]{
                    idKomponen
                }, new RowMapper() {

            public Object mapRow(ResultSet rs, int arg1) throws SQLException {
                PerekamanKomponenAnggaranBiayaGaji obj = new PerekamanKomponenAnggaranBiayaGaji();
                obj.setIdKomponen(ClassAntiNull.AntiNullInt(rs.getInt("idKomponen")));
                obj.setTahunAnggaran(ClassAntiNull.AntiNullString(rs.getString("tahunAnggaran")));
                obj.setIsKomponenGaji(ClassAntiNull.AntiNullString(rs.getString("isKomponenGaji")));
                obj.setKodeKomponenGaji(ClassAntiNull.AntiNullString(rs.getString("kodeKomponenGaji")));
                obj.setKomponenDiluarGaji(ClassAntiNull.AntiNullString(rs.getString("komponenDiluarGaji")));
                obj.setAdm(ClassAntiNull.AntiNullString(rs.getString("adm")));
                obj.setAlias(ClassAntiNull.AntiNullString(rs.getString("alias")));
                obj.setRumus(ClassAntiNull.AntiNullString(rs.getString("rumus")));
                return obj;
            }
        });
    }
}
